package com.microservice.api.auth;

import com.microservice.api.common.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;

/**
 * 认证服务Feign客户端
 * 供其他服务调用认证相关接口
 */
@FeignClient(name = "auth-service", path = "/auth")
public interface AuthServiceClient {
    
    /**
     * 验证Token是否有效
     * @param token JWT Token
     * @return 验证结果
     */
    @GetMapping("/validate")
    Result<Boolean> validateToken(@RequestHeader("Authorization") String token);
    
    /**
     * 从Token中解析用户ID
     * @param token JWT Token
     * @return 用户ID
     */
    @GetMapping("/parse/userId")
    Result<Long> getUserIdFromToken(@RequestHeader("Authorization") String token);
    
    /**
     * 从Token中解析用户名
     * @param token JWT Token
     * @return 用户名
     */
    @GetMapping("/parse/username")
    Result<String> getUsernameFromToken(@RequestHeader("Authorization") String token);

    /**
     * 从Token中解析用户名
     * @param token JWT Token
     * @return 用户名
     */
    @GetMapping("/parse/nickname")
    Result<String> getNicknameFromToken(@RequestHeader("Authorization") String token);
    
    /**
     * 使指定用户的所有Token失效（用于封禁用户、强制登出等场景）
     * @param userId 用户ID
     * @return 操作结果
     */
    @GetMapping("/invalidate/user/{userId}")
    Result<String> invalidateUserTokens(@PathVariable("userId") Long userId);
    
    /**
     * 解除用户Token封禁（用于解封用户账号）
     * @param userId 用户ID
     * @return 操作结果
     */
    @org.springframework.web.bind.annotation.PostMapping("/unblock/user/{userId}")
    Result<String> unblockUserTokens(@PathVariable("userId") Long userId);
    
    /**
     * 验证验证码是否正确
     * @param key 验证码key
     * @param code 用户输入的验证码
     * @return 验证结果
     */
    @GetMapping("/captcha/verify")
    Result<Boolean> verifyCaptcha(@org.springframework.web.bind.annotation.RequestParam("key") String key, 
                                   @org.springframework.web.bind.annotation.RequestParam("code") String code);
}
